@@ -54,6 +54,7 @@ gem "carrierwave" |
||
| 54 | 54 |
gem 'i18n' |
| 55 | 55 |
gem 'rails_12factor', group: :production |
| 56 | 56 |
gem 'gibbon' |
| 57 |
+gem 'resque' |
|
| 57 | 58 |
|
| 58 | 59 |
group :test do |
| 59 | 60 |
gem "rspec" |
@@ -153,6 +153,7 @@ GEM |
||
| 153 | 153 |
subexec (~> 0.2.1) |
| 154 | 154 |
mini_portile (0.6.0) |
| 155 | 155 |
minitest (4.7.5) |
| 156 |
+ mono_logger (1.1.0) |
|
| 156 | 157 |
multi_json (1.10.1) |
| 157 | 158 |
multi_test (0.1.1) |
| 158 | 159 |
multi_xml (0.5.5) |
@@ -165,6 +166,8 @@ GEM |
||
| 165 | 166 |
pg (0.17.1) |
| 166 | 167 |
polyglot (0.3.5) |
| 167 | 168 |
rack (1.5.2) |
| 169 |
+ rack-protection (1.5.3) |
|
| 170 |
+ rack |
|
| 168 | 171 |
rack-test (0.6.2) |
| 169 | 172 |
rack (>= 1.0) |
| 170 | 173 |
rails (4.0.4) |
@@ -189,7 +192,16 @@ GEM |
||
| 189 | 192 |
rdoc (4.1.2) |
| 190 | 193 |
json (~> 1.4) |
| 191 | 194 |
redcarpet (3.1.2) |
| 195 |
+ redis (3.1.0) |
|
| 196 |
+ redis-namespace (1.5.1) |
|
| 197 |
+ redis (~> 3.0, >= 3.0.4) |
|
| 192 | 198 |
ref (1.0.5) |
| 199 |
+ resque (1.25.2) |
|
| 200 |
+ mono_logger (~> 1.0) |
|
| 201 |
+ multi_json (~> 1.0) |
|
| 202 |
+ redis-namespace (~> 1.3) |
|
| 203 |
+ sinatra (>= 0.9.2) |
|
| 204 |
+ vegas (~> 0.1.2) |
|
| 193 | 205 |
rspec (3.1.0) |
| 194 | 206 |
rspec-core (~> 3.1.0) |
| 195 | 207 |
rspec-expectations (~> 3.1.0) |
@@ -222,6 +234,10 @@ GEM |
||
| 222 | 234 |
simple_form (3.0.2) |
| 223 | 235 |
actionpack (~> 4.0) |
| 224 | 236 |
activemodel (~> 4.0) |
| 237 |
+ sinatra (1.4.5) |
|
| 238 |
+ rack (~> 1.4) |
|
| 239 |
+ rack-protection (~> 1.4) |
|
| 240 |
+ tilt (~> 1.3, >= 1.3.4) |
|
| 225 | 241 |
sprockets (2.11.0) |
| 226 | 242 |
hike (~> 1.2) |
| 227 | 243 |
multi_json (~> 1.0) |
@@ -256,6 +272,8 @@ GEM |
||
| 256 | 272 |
uglifier (2.5.3) |
| 257 | 273 |
execjs (>= 0.3.0) |
| 258 | 274 |
json (>= 1.8.0) |
| 275 |
+ vegas (0.1.11) |
|
| 276 |
+ rack (>= 1.0.0) |
|
| 259 | 277 |
warden (1.2.3) |
| 260 | 278 |
rack (>= 1.0) |
| 261 | 279 |
xpath (2.0.0) |
@@ -292,6 +310,7 @@ DEPENDENCIES |
||
| 292 | 310 |
rails (= 4.0.4) |
| 293 | 311 |
rails_12factor |
| 294 | 312 |
redcarpet |
| 313 |
+ resque |
|
| 295 | 314 |
rspec |
| 296 | 315 |
rspec-rails |
| 297 | 316 |
sass-rails |
@@ -1,9 +1,9 @@ |
||
| 1 | 1 |
class UserMailer < ActionMailer::Base |
| 2 | 2 |
default from: "contact@website.com" |
| 3 | 3 |
|
| 4 |
- def signup_message(user) |
|
| 4 |
+ def signup_message(email) |
|
| 5 | 5 |
config = Info.first |
| 6 |
- mail :to => user.email, |
|
| 6 |
+ mail :to => email, |
|
| 7 | 7 |
:subject => ("Welcome to "+ config.website_name),
|
| 8 | 8 |
:from => config.contact_email, |
| 9 | 9 |
:from_name => config.website_name, |
@@ -1,7 +1,7 @@ |
||
| 1 | 1 |
class Subscription < ActiveRecord::Base |
| 2 | 2 |
|
| 3 | 3 |
after_create do |
| 4 |
- subscribe_to_mailchimp |
|
| 4 |
+ subscribe_to_mailchimp |
|
| 5 | 5 |
end |
| 6 | 6 |
|
| 7 | 7 |
def full_name |
@@ -17,15 +17,8 @@ class Subscription < ActiveRecord::Base |
||
| 17 | 17 |
end |
| 18 | 18 |
end |
| 19 | 19 |
|
| 20 |
- def subscribe_to_mailchimp testing=false |
|
| 21 |
- return true if (Rails.env.test? && !testing) |
|
| 22 |
- list_id = ENV['MAILCHIMP_LIST_ID'] |
|
| 23 |
- response = Rails.configuration.mailchimp.lists.subscribe({
|
|
| 24 |
- id: list_id, |
|
| 25 |
- email: {email: email},
|
|
| 26 |
- double_optin: false |
|
| 27 |
- }) |
|
| 28 |
- #response |
|
| 20 |
+ def subscribe_to_mailchimp |
|
| 21 |
+ Resque.enqueue(SubscribeToMailchimp, self.id) |
|
| 29 | 22 |
end |
| 30 | 23 |
|
| 31 | 24 |
end |
@@ -17,19 +17,17 @@ class User < ActiveRecord::Base |
||
| 17 | 17 |
end |
| 18 | 18 |
|
| 19 | 19 |
after_create do |
| 20 |
- subscribe_user |
|
| 21 |
- send_signup_mail |
|
| 20 |
+ after_signup_tasks |
|
| 22 | 21 |
end |
| 23 | 22 |
|
| 24 |
- def subscribe_user |
|
| 23 |
+ def after_signup_tasks |
|
| 24 |
+ # Send signup email (worker) |
|
| 25 |
+ Resque.enqueue(SendSignupMessage, self.id) |
|
| 26 |
+ # Add user to subscription list |
|
| 25 | 27 |
if Subscription.find_by_email(self.email) == nil |
| 26 | 28 |
Subscription.create(first_name: self.first_name, last_name: self.last_name, email: self.email) |
| 27 | 29 |
end |
| 28 |
- end |
|
| 29 |
- |
|
| 30 |
- |
|
| 31 |
- def send_signup_mail |
|
| 32 |
- UserMailer.signup_message(self).deliver |
|
| 30 |
+ # Mixpanel Tracking Analytics |
|
| 33 | 31 |
end |
| 34 | 32 |
|
| 35 | 33 |
end |
@@ -0,0 +1,14 @@ |
||
| 1 |
+class SendSignupMessage |
|
| 2 |
+ @queue = :send_signup_message_queue |
|
| 3 |
+ |
|
| 4 |
+ def self.perform(user_id) |
|
| 5 |
+ |
|
| 6 |
+ # Get User |
|
| 7 |
+ user = User.find_by_id(user_id) |
|
| 8 |
+ |
|
| 9 |
+ # Send Signup Email |
|
| 10 |
+ UserMailer.signup_message(user.email).deliver |
|
| 11 |
+ |
|
| 12 |
+ end |
|
| 13 |
+ |
|
| 14 |
+end |
@@ -0,0 +1,20 @@ |
||
| 1 |
+class SubscribeToMailchimp |
|
| 2 |
+ @queue = :subscribe_to_mailchimp_queue |
|
| 3 |
+ |
|
| 4 |
+ def self.perform(id) |
|
| 5 |
+ |
|
| 6 |
+ # Get User |
|
| 7 |
+ subscription = Subscription.find_by_id(id) |
|
| 8 |
+ |
|
| 9 |
+ return true if (Rails.env.test? && !testing) |
|
| 10 |
+ list_id = ENV['MAILCHIMP_LIST_ID'] |
|
| 11 |
+ response = Rails.configuration.mailchimp.lists.subscribe({
|
|
| 12 |
+ id: list_id, |
|
| 13 |
+ email: {email: subscription.email},
|
|
| 14 |
+ double_optin: false |
|
| 15 |
+ }) |
|
| 16 |
+ |
|
| 17 |
+ |
|
| 18 |
+ end |
|
| 19 |
+ |
|
| 20 |
+end |
@@ -0,0 +1,2 @@ |
||
| 1 |
+require "resque/tasks" |
|
| 2 |
+task "resque:setup" => :environment |